<template>
    <rx-layout>
        <div slot="left" width="220" showButton="true">
            <rx-fit>
                <rx-category-treeeditor
                    cat-key="FORM"
                    :statisticConfig="statisticConfig"
                    :edit="true"
                    @handSelect="handSelect"
                    :async="true"
                    v-if="isShowManageTree"
                    :isAdmin="isManageToTree"
                    :checkToDel="true"
                ></rx-category-treeeditor>
            </rx-fit>
        </div>
        <div slot="center" style>
            <rx-fit :isheader="isheader">
                <div slot="toolheader" foldheader="true" foldbtn="false" border="false">
                    <div class="table-operator">
                        <a-button type="primary" icon="plus" v-if="findAuthRight('add')" @click="add">
                            {{ $ti18('rxList.newBtn', '新建') }}
                        </a-button>
                        <a-button type="primary" v-if="!isAppDevelop && selectedRowKeys.length > 0 " icon="redo"
                                  @click="changeApp('FORM',selectedRows,'pkId','name','appId','treeId',changeAppId)">
                            {{ i18n('button.changeApp', '变更应用') }}
                        </a-button>
                        <a-button v-if="selectedRowKeys.length > 0"
                                  type="primary"
                                  icon="switcher" @click="openCategoryDialog">
                            {{ $ti18('rxList.changeCategory', '切换分类') }}
                        </a-button>
                        <a-dropdown>
                            <a-button>
                                {{ $ti18('rxList.moreBtn', '更多') }}
                                <a-icon type="down"/>
                            </a-button>
                            <a-menu slot="overlay">
                                <a-menu-item key="1" @click="doImport" v-if="findAuthRight('add')"><i
                                    class="iconfont icondaoru"></i>
                                    {{ $ti18('rxList.importBtn', '导入') }}
                                </a-menu-item>
                                <a-sub-menu>
                                    <span slot="title"><i class="iconfont icondaochu"></i>
                                     {{ $ti18('rxList.exportBtn', '导出') }}
                                    </span>
                                    <a-menu-item @click="doExport('1')"><i class="iconfont icondaochu"></i>
                                        {{ $ti18('rxList.exportSelected', '导出选中') }}
                                    </a-menu-item>
                                    <a-menu-item @click="doExport('2')"><i class="iconfont icondaochu"></i>
                                        {{ $ti18('rxList.exportResults', '导出查询结果') }}
                                    </a-menu-item>
                                </a-sub-menu>
                                <a-menu-item
                                    key="2"
                                    @click="editOne"
                                    v-if="findAuthRight('edit') && editEnable && selectedRowKeys.length > 0"
                                    alias="formRuleEdit"
                                    :butn-type="'primary'"
                                    :show-no-right="false"
                                >
                                    <a-icon type="edit"/>
                                    {{ $ti18('rxList.editBtn', '编辑') }}
                                </a-menu-item>
                                <a-menu-item
                                    key="3"
                                    @click="delByIds(selectedRowKeys)"
                                    v-if="findAuthRight('delete') && removeEnable && selectedRowKeys.length > 0"
                                    alias="formRuleDelete"
                                    :butn-type="'danger'"
                                    :show-no-right="false"
                                >
                                    <a-icon type="delete"/>
                                    {{ $ti18('rxList.delBtn', '删除') }}
                                </a-menu-item>
                                <a-menu-item
                                    key="4"
                                    @click="changeExport(exportConf)"
                                    v-if="selectedRowKeys.length > 0"
                                    alias="formRuleDelete"
                                    :butn-type="'primary'"
                                    :show-no-right="false"
                                >
                                    <a-icon type="switcher"/>
                                    {{ $ti18('rxList.changeExport', '切换导出') }}
                                </a-menu-item>
                            </a-menu>
                        </a-dropdown>
                    </div>
                    <span class="search-btn-box" v-if="!isheader">
                <span class="search-btn" @click.stop="searchshow"><i class="iconfont iconguolv"></i>
                {{ $ti18('rxList.leachBtn', '过滤') }}
                </span>
            </span>
                </div>
                <div btnalign="right" slot="searchbar" v-if="fitSearch" @search="search" @cancel="cancel"
                     @close="closeSearchbar">
                    <a-form :layout="colLayout">
                        <a-row :gutter="24">
                            <a-col :span="colSpan">
                                <a-form-item :label="$comi18('rxDialog.formulasName', '公式名称')">
                                    <a-input :placeholder="$comi18('rxDialog.formulasName', '请输入名称','input')"
                                             v-model="queryParam.Q_NAME__S_LK"/>
                                </a-form-item>
                            </a-col>
                            <a-col :span="colSpan">
                                <a-form-item :label="i18n('form.formTriggerTiming','表单触发时机')">
                                    <a-select :placeholder="i18n('form.formTriggerTiming','表单触发时机','select')"
                                              v-model="queryParam.Q_ACTION__S_LK"
                                              :allowClear="true">
                                        <a-select-option value="new">{{ $ti18('rxList.newBtn', '新建') }}
                                        </a-select-option>
                                        <a-select-option value="upd">{{ $ti18('rxList.update', '更新') }}
                                        </a-select-option>
                                        <a-select-option value="del">{{ $ti18('rxList.delBtn', '删除') }}
                                        </a-select-option>
                                    </a-select>
                                </a-form-item>
                            </a-col>
                            <a-col :span="colSpan" v-if="!curApp.appId">
                                <a-form-item :label="$ti18('rxForm.appId', '应用')">
                                    <rx-search-app @change="appChange" v-model="searchApps">
                                    </rx-search-app>
                                </a-form-item>
                            </a-col>
                        </a-row>
                    </a-form>
                </div>
                <rx-grid
                    ref="table"
                    :bordered="isBorder"
                    :allowRowSelect="true"
                    :multiSelect="true"
                    :columns="columns"
                    :defaultPageSize="10"
                    url="/api-form/form/core/formTableFormula/query"
                    :queryParam="queryParam"
                    data-field="result.data"
                    :pageSizeOptions="['10','30','40']"
                    id-field="id"
                    :loadDataOnstart="true"
                    :handData="handData"
                    @selectChange="onSelectChange"
                >
                    <span slot="exportApp">
                         {{ exportI18n('export.isExport', '导出') }}
                        <export-app/>
                    </span>
                    <span slot="action_" slot-scope="{text, record}">
                    <a-tag :color="actionMap[item].color" v-for="item in actionSplit(text)">
                      {{ actionMap[item].text }}
                    </a-tag>
                    </span>
                        <span slot="isTest" slot-scope="{text, record}">
                         <a-tag :color="isTestMap[text].color">
                          <span>{{ isTestMap[text].text }}</span>
                        </a-tag>
                    </span>
                        <span slot="enabled" slot-scope="{text, record}">
                         <a-tag :color="enabledMap[text].color">
                          <span>{{ enabledMap[text].text }}</span>
                        </a-tag>
                    </span>
                    <span slot="appId" slot-scope="{ text, record }">
                        {{ allApps[text] ? $i18(allApps[text].appName, '应用名称') : $ti18('rxList.noAppName', '无') }}
                    </span>
                    <span slot="isExport" slot-scope="{ text, record }">
                        <a-tag :color="text == 1 ? 'green' : 'red'">
                            <span>{{ text == 1 ? exportI18n('export.yes', '是') : exportI18n('export.no', '否') }}</span>
                        </a-tag>
                    </span>
                    <span slot="action" slot-scope="{ text, record }" class="actionIcons">
                        <span v-if="findAuthRight('edit') && editEnable" @click.stop="edit(record)">{{ $ti18('rxList.editBtn', '编辑') }}</span>
                        <span v-if="findAuthRight('delete') && removeEnable" @click.stop="delByIds([record.id])">{{ $ti18('rxList.delBtn', '删除') }}</span>
                        <span @click="setExport(record,exportConf)">{{ record.isExport == 1 ? exportI18n('export.noExport', '不导出') : exportI18n('export.exported', '导出') }}</span>
                    </span>
                </rx-grid>
            </rx-fit>
        </div>
    </rx-layout>
</template>

<script>
import FormTableFormulaApi from '@/api/form/core/formTableFormula'
import FormTableFormulaEdit from './FormTableFormulaEdit'
import FormImport from './FormImport'
import {BaseList, Util} from "@lowcode/jpaas-common-lib";
import RxCategoryTreeeditor from "@/components/redxun/rx-category-treeeditor";
import changeAppJs from "@/views/modules/share/changeApp";
import {mapState} from "vuex";
import exportApp from "@/views/modules/share/exportApp";
import AppSearch from "@/views/modules/share/AppSearch";
import RxSearchApp from "@/views/modules/share/rx-search-app";
import switchExport from "@/utils/switchExport";
import ChangeCategory from "@/views/modules/share/ChangeCategory.js"

export default {
    name: 'FormTableFormulaList',
    mixins: [BaseList, changeAppJs, AppSearch, switchExport, ChangeCategory],
    components: {
        RxCategoryTreeeditor,
        exportApp,
        RxSearchApp
    },
    computed: {
        ...mapState({
            //所属应用
            allApps: state => state.appSetting ? state.appSetting.allApps : {}
        }),
    },
    data() {
        return {
            columns: [
                {
                    title: this.$ti18('rxList.index', '序号'),
                    type: 'indexColumn',
                    width: 40,
                    dataIndex: 'serial',
                    scopedSlots: {customRender: 'serial'}
                },
                {title: this.i18n('form.name', '名称'), dataIndex: 'name', width: 120},
                {
                    title: this.i18n('form.triggerTiming', '触发时机'),
                    dataIndex: 'action_',
                    width: 120,
                    scopedSlots: {customRender: 'action_'}
                },
                {
                    title: this.i18n('form.debugging', '调试'),
                    dataIndex: 'isTest',
                    width: 80,
                    scopedSlots: {customRender: 'isTest'}
                },
                {
                    title: this.i18n('form.state', '状态'),
                    dataIndex: 'enabled',
                    width: 80,
                    scopedSlots: {customRender: 'enabled'}
                },
                {
                    title: this.i18n('form.application', '所属应用'),
                    dataIndex: 'appId',
                    width: 100,
                    sortField: 'APP_ID_',
                    scopedSlots: {customRender: 'appId'}
                },
                {
                    dataIndex: 'isExport',
                    slots: {title: 'exportApp'},
                    width: 60,
                    scopedSlots: {customRender: 'isExport'}
                },
                {title: this.i18n('form.createTime', '创建时间'), dataIndex: 'createTime', width: 140},
                {
                    title: this.$ti18('rxList.action', '操作'),
                    dataIndex: 'action',
                    scopedSlots: {customRender: 'action'},
                    width: 140
                }
            ],
            component: FormTableFormulaEdit,
            comment: this.i18n('list.comment', '表间公式'),
            max: true,
            QueryData: {},
            isTestMap: {
                "YES": {color: 'green', text: this.i18n('isTestMap.yes', '是')},
                "NO": {color: 'red', text: this.i18n('isTestMap.no', '否')}
            },
            enabledMap: {
                "YES": {color: 'green', text: this.i18n('enabledMap.startUsing', '启用')},
                "NO": {color: 'red', text: this.i18n('enabledMap.forbidden', '禁用')}
            },
            actionMap: {
                "new": {color: 'orange', text: this.$ti18('rxList.newBtn', '新建')},
                "upd": {color: 'green', text: this.$ti18('rxList.update', '更新')},
                "del": {color: 'purple', text: this.$ti18('rxList.delBtn', '删除')},
            },
            curTree: {},
            statisticConfig: {
                type: "static_form",
                table: "FORM_TABLE_FORMULA t",
                field: "TREE_ID_",
                whereConf: []
            },
            /**
             * 导出配置
             */
            exportConf: {
                Api: FormTableFormulaApi,
                id: "id"
            },
            //变更分类配置
            categoryConfig: {
                Api: FormTableFormulaApi,
                catKey: "FORM",
                gridRef: "table"
            }
        }
    },
    created() {
        this.isUserManager(this.$route.query.appId);
        this.needFilterAppId("isAppMenu");
        this.columns = this.removeAppColumn(this.curApp.appId, this.columns)
    },
    methods: {
        i18n(name, text, key) {
            return this.$ti18(name, text, "formTableFormula", key);
        },
        exportI18n(name, text, key) {
            return this.$ti18(name, text, "appExport", key);
        },
        handData(data) {
            data.forEach(item => {
                item.action_ = item.action;
                delete item.action;
            })
        },
        delById(ids) {
            return FormTableFormulaApi.del({ids: ids.join(',')});
        },
        getListByParams(parameter) {
            return FormTableFormulaApi.query(parameter)
        },
        handSelect(curRow) {
            this.curTree = curRow
            var treeId = curRow.treeId;
            if (treeId != "0") {
                this.queryParam.Q_TREE_ID__S_EQ = treeId;
            } else {
                delete this.queryParam.Q_TREE_ID__S_EQ;
            }
            this.loadData(this.queryParam);
        },
        actionSplit(action) {
            return action.split(",")
        },
        search() {
            this.$refs.table.loadData();
        },
        cancel() {
            this.resetSearch();
        },
        closeSearchbar() {
            //关闭过滤弹窗；（点击X触发）
            this.fitSearch = false;
        },

        doExport(isSelected) {
            var exportList = [];
            //选中的导出
            if (isSelected == "1") {
                exportList = this.$refs.table.getSelectedRows();
                if (!exportList || exportList.length == 0) {
                    this.$warning({
                        title: this.$ti18('rxMsa.masWarn.delInfo', '警告'),
                        content: this.i18n('content.exportTips', '请选择需要导出的记录！'),
                    });
                    return;
                }
                let solutionIds = []
                exportList.forEach((item) => {
                    solutionIds.push(item.id)
                })
                this.QueryData.params = {
                    ids: solutionIds.toString()
                }
            } else {
                // 导出所查询的
                this.QueryData.params = {
                    isQuery: 0,
                }
                this.QueryData.params = Object.assign(this.QueryData.params, this.queryParam)
            }
            if (this.$refs.table.dataAction == "") {
                this.$warning({
                    title: this.$ti18('rxMsa.masWarn.delInfo', '警告'),
                    content: this.i18n('content.noData', '该分类没有数据！'),
                });
                return;
            }
            FormTableFormulaApi.listExport(this.QueryData)
        },

        doImport() {
            if (!this.curTree || !this.curTree.treeId) {
                this.$warning({
                    title: this.$ti18('rxMsa.masWarn.delInfo', '警告'),
                    content: this.i18n('content.tables', '请选择表间公式的分类!！'),
                });
                return
            }
            var treeId = this.curTree.treeId
            Util.open(
                {
                    component: FormImport,
                    curVm: this,
                    widthHeight: ['800px', '600px'],
                    title: this.i18n('form.importInter', '表间公式导入'),
                    data: {
                        treeId: treeId,
                        callback: function (params) {
                            let self = this;
                            FormTableFormulaApi.doImport(params).then(res => {
                                this.isSpinning = false;
                                if (!res.success) {
                                    self.$confirm({
                                        title: this.$ti18('rxMsa.masWarn.delInfo', '警告'),
                                        content: this.i18n('form.importError', '导入失败！'),
                                        okText: this.$ti18('rxForm.ackBtn', '确认'),
                                        cancelText: this.$ti18('rxForm.cancelBtn', '取消'),
                                    });
                                    return;
                                }
                                self.getUpdataSqls(res.data);
                            });
                        }
                    }
                }, function (action) {
                });
        },
        changeAppId(selectedRows) {
            FormTableFormulaApi.saveList(selectedRows);
        }
    }
}
</script>
<style scoped>

</style>

